fit-we是一套weex开发工程化框架,无侵入且扩展性强,可以让你轻松使用weex开发移动项目。框架中内置了一些必要的通用模块,如路由跳转、数据存储、事件通知等等,统一定义了模块书写和调用方式,对外也提供一套扩展模块功能接口。采用多页开发的形式,用webpack进行打包,将生成的文件并入zip包中,让渲染容器从本地快速加载js文件,当然你也可以选择从远程服务器加载js文件。
如何接入
android
引入fit-we库
1compile project(':fit-we')初始化(通过FitWe和FitConfiguration类)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152public class App extends Application {@Overridepublic void onCreate() {super.onCreate();initFitWe();}private void initFitWe() {FitConfiguration configuration = new FitConfiguration(this).setDebug(BuildConfig.DEBUG).setHostServer(BuildConfig.fitWeHostServer).setCheckApiHandler(new CheckApiHandler() {@Overridepublic void checkRequest(ResourceCheck resourceCheck) {checkApiRequest(resourceCheck);}}).addNativeParam("apiServer", "http://www.fitwe.com");FitWe.getInstance().init(configuration);}private void checkApiRequest(final ResourceCheck resourceCheck) {Request request = new Request.Builder().url("http://10.10.12.151:8889/checkWeexUpdate?version=" + FitWe.getInstance().getVersion()).get().build();Call call = HttpManager.getHttpClient().newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {resourceCheck.setCheckApiFailResp(e);}@Overridepublic void onResponse(Call call, Response response) throws IOException {try {JSONObject jsonObject = JSON.parseObject(response.body().string());int code = jsonObject.getIntValue("code");if (code == 1000) {resourceCheck.setCheckApiSuccessResp(jsonObject.getString("version"),jsonObject.getString("md5"),jsonObject.getString("dist"));return;}} catch (Exception e) {e.printStackTrace();}resourceCheck.setCheckApiFailResp(new Exception("weex bundle check fail"));}});}}
ios
ios库正在开发中…….
weex
直接下载weex端开发模板即可
打包(以android端为例)
运行npm run build
- 将生成的zip包放入assets文件夹,命名为bundle.zip
- 将生成的zip包放入服务器,通过
FitConfiguration.setCheckApiHandler
实现自动更新
调试 (以android端为例)
- 运行
npm run dev
- 调用
FitConfiguration.setHostServer
设置weex文件开发所在的服务器地址 - 修改代码后,将会自动页面
如何使用模块
功能实现思路
weex端
- 从api定义文件中获取到定义的模块名那(page.name)和方法名(page.apis[0].namespace),并且模块名和方法名都是和原生端定义的扩展模块文件一一对应
- 采用js的Object.defineProperty方法将以模块名命名的对象挂载在Vue原型对象上去
- 在每个模块内部定义方法,并以方法名称为api定义文件中的方法名
- 每个模块中的方法最终会调用到统一函数
|
|
原生端
- 在app启动的时候,扫描所有以
_fit.json
结尾的文件 - 循环取出每个模块,如果该模块继承自
WXComponent
表示则该模块属于UI模块,直接注入weex中;如果继承自WXModule
,则每个用@JSMethod
注解的方法参数必须要为JSONObject params, JSCallback successCallback, JSCallback errorCallback
,如果模块中出现一个不合法的方法,则会忽视该模块,否则注册。 - 原生端和weex端传输数据采用JSONObject,并且一定还要定义一个成功回调函数和一个失败回调函数
|
|
使用
调用模块
有两种调用方式:
回调方式
123456789101112this.$ui.alert({title: '提示',message: '去进化,皮卡丘',buttonLabels: ['取消', '去进化'],cancelable: 1,success(result) {Vue.prototype.$ui.toast(JSON.stringify(result));},error(err) {Vue.prototype.$ui.toast(JSON.stringify(err));}});promise回调
12345678910this.$ui.alert({title: '提示',message: '去进化,皮卡丘',buttonLabels: ['取消', '去进化'],cancelable: 1}).then(value => {this.$ui.toast(JSON.stringify(result));}).catch(err => {this.$ui.toast(JSON.stringify(err));});
前端定义api文件
api对象上的模块名和定义方法名、需要传递的参数、兼容调用处理。之后会根据这些信息在Vue的原型对象上,通过js Object.defineProperty
生成一个以模块名命名的对象,该对象中的方法就是此处定义的方法。
当你用this.$ui.toast('hello')
的时候,就会自动调用原生写好的$ui模块上的toast方法。
|
|
原生端定义module
- 定义原生模块
原生模块中的每个用@JSMethod
注解的方法参数必须要为JSONObject params, JSCallback successCallback, JSCallback errorCallback
,如果模块中出现一个不合法的方法,则会忽视该模块。
|
|
- 在以
_fit.json
文件定义该模块(android环境下该文件可放在assets文件夹中),以便fit-we的模块加载器可以扫描到该模块123456{"$navigator": "com.fit.we.library.extend.module.NavigatorModule","$page": "com.fit.we.library.extend.module.PageModule","$tool": "com.fit.we.library.extend.module.ToolModule","$ui": "com.fit.we.library.extend.module.UiModule"}
调用外部扩展的模块
调用$pay模块上的payMoney
|
|
如何使用事件通知
功能实现思路
weex端
实现一个类似于事件中心功能,可以订阅方法和取消订阅方法,由于项目采用多页面开发的原因,因此两个页面之间还需要借助原生端来进行通信
|
|
原生端
通过weex先前注入module接受事件,然后在将事件通过原生端的事件总线功能转发到每个页面,每个页面接受到后,会通过weex的golbalevent转发到定义weex端定义的事件总线
|
|
原生端如果需要接受weex页面发布的通知,只需要订阅FitEvent即可
使用
订阅
|
|
取消订阅
|
|
发布事件
|
|